#include <iostream>
using namespace std;

// 定义环形队列结构体
struct SQQueue {
    int size; // 队列大小
    char* data; // 存储队列元素的数组
    int front, rear; // 队头和队尾指针
};

// 初始化环形队列
void initQueue(SQQueue& q, int size) {
    q.size = size;
    q.data = new char[size];
    q.front = q.rear = 0;
}

// 判断队列是否非空
bool isQueueEmpty(SQQueue& q) {
    return q.front == q.rear;
}

// 入队操作
void enqueue(SQQueue& q, char elem) {
    if ((q.rear + 1) % q.size == q.front) {
        cout << "队列已满" << endl;
        return;
    }
    q.data[q.rear] = elem;
    q.rear = (q.rear + 1) % q.size;
}

// 出队操作
char dequeue(SQQueue& q) {
    if (isQueueEmpty(q)) {
        cout << "队列为空" << endl;
        return 0;
    }
    char elem = q.data[q.front];
    q.front = (q.front + 1) % q.size;
    return elem;
}

// 打印出队序列
void printQueue(SQQueue& q) {
    if (isQueueEmpty(q)) {
        cout << "队列为空" << endl;
        return;
    }
    int i = q.front;
    while (i != q.rear) {
        cout << q.data[i] << " ";
        i = (i + 1) % q.size;
    }
    cout << q.data[i] << endl;
}

// 释放队列
void destroyQueue(SQQueue& q) {
    delete[] q.data;
}

int main() {
    // 初始化队列，大小为 5
    SQQueue q;
    initQueue(q, 5);

    // 入队元素 a、b、c
    enqueue(q, 'a');
    enqueue(q, 'b');
    enqueue(q, 'c');

    // 出队并输出元素
    char elem = dequeue(q);
    cout << "出队元素: " << elem << endl;

    // 入队元素 d、e、f
    enqueue(q, 'd');
    enqueue(q, 'e');
    enqueue(q, 'f');

    // 输出出队序列
    printQueue(q);

    // 释放队列
    destroyQueue(q);

    return 0;
}
